package com.tjx.constant;

/**
 * Redis键前缀常量类
 * 统一管理Redis缓存键的前缀，避免键名冲突，提高可维护性
 */
public final class RedisKeyPrefix {

    // 私有构造方法，防止实例化
    private RedisKeyPrefix() {
        throw new AssertionError("禁止实例化此类");
    }

    // 游乐项目相关
    public static final String AMUSEMENT_PROJECT = "park:amusement_project:"; // 对应amusement_project表

    // 营业时间相关
    public static final String BUSINESS_HOURS = "park:business_hours:"; // 对应business_hours表

    // 轮播图相关
    public static final String CAROUSEL = "park:carousel:"; // 对应carousel表

    // 聊天记录相关
    public static final String CHAT_RECORD = "park:chat_record:"; // 对应chat_record表

    // 收藏相关
    public static final String COLLECTION = "park:collection:"; // 对应collection表

    // 优惠券相关
    public static final String COUPON = "park:coupon:"; // 对应coupon表

    // 优惠券-用户关联相关
    public static final String COUPON_USER = "park:coupon_user:"; // 对应coupon_user表

    // 员工相关
    public static final String EMPLOYEE = "park:employee:"; // 对应employee表

    // 常见问题相关
    public static final String FAQ = "park:faq:"; // 对应faq表

    // 订单相关
    public static final String ORDER = "park:order:"; // 对应order表

    // 套餐相关
    public static final String PACKAGE = "park:package:"; // 对应package表

    // 套餐详情相关
    public static final String PACKAGE_DETAIL = "park:package_detail:"; // 对应package_detail表

    // 演出相关
    public static final String PERFORMANCE = "park:performance:"; // 对应performance表

    // 票相关
    public static final String TICKET = "park:ticket:"; // 对应ticket表

    // 票种类相关
    public static final String TICKET_TYPE = "park:ticket_type:"; // 对应ticket_type表

    // 票-游客关联相关
    public static final String TICKET_VISITOR = "park:ticket_visitor:"; // 对应ticket_visitor表

    // 用户相关
    public static final String USER = "park:user:"; // 对应user表

    // 游客信息相关
    public static final String VISITOR_INFO = "park:visitor_info:"; // 对应visitor_info表

    public static final String PACKAGE_LIST_KEY = "park:package:list"; // 套餐列表

    // 通用业务前缀（非直接对应表的场景）
    public static final String CAPTCHA = "park:captcha:"; // 验证码缓存
    public static final String TOKEN = "park:token:"; // 令牌缓存
    public static final String LOCK = "park:lock:"; // 分布式锁前缀


    // 极短期缓存（适用于高频变化、临时有效数据）
    public static final long EXPIRE_1_MINUTE = 60; // 1分钟：如接口防重放令牌
    public static final long EXPIRE_5_MINUTES = 300; // 5分钟：如验证码、临时会话
    public static final long EXPIRE_15_MINUTES = 900; // 15分钟：如表单临时存储、临时锁

    // 短期缓存（适用于中频变化数据）
    public static final long EXPIRE_30_MINUTES = 1800; // 30分钟：如用户临时操作记录
    public static final long EXPIRE_1_HOUR = 3600; // 1小时：如用户基本信息、会话数据
    public static final long EXPIRE_2_HOURS = 7200; // 2小时：如订单临时状态、活动参与记录

    // 中期缓存（适用于低频变化数据）
    public static final long EXPIRE_6_HOURS = 21600; // 6小时：如商品库存、游乐项目状态
    public static final long EXPIRE_12_HOURS = 43200; // 12小时：如套餐信息、演出排期
    public static final long EXPIRE_1_DAY = 86400; // 1天：如静态配置、常见问题FAQ

    // 长期缓存（适用于几乎不变的数据）
    public static final long EXPIRE_3_DAYS = 259200; // 3天：如票种类型、基础字典数据
    public static final long EXPIRE_7_DAYS = 604800; // 7天：如用户收藏记录、历史订单快照
    public static final long EXPIRE_30_DAYS = 2592000; // 30天：如长期有效的优惠券模板、用户偏好设置

    // 特殊场景过期时间
    public static final long EXPIRE_NEVER = -1; // 永不过期（谨慎使用，如核心配置）
    public static final long EXPIRE_LOCK_DEFAULT = 30; // 分布式锁默认过期时间（30秒，避免死锁）

}

